package com.yxx.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxx.entity.Article;
import com.yxx.entityModel.vo.query.ArticleConditionQuery;
import com.yxx.entityModel.vo.query.ArticleQuery;
import com.yxx.entityModel.vo.query.PageQuery;
import com.yxx.entityModel.vo.response.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author yuxiangxun
 * @date 2025/1/21
 * @apiNote
 */
@Repository
public interface ArticleMapper extends BaseMapper<Article> {
    /**
     * 查询后台文章数量
     * @param articleQuery
     * @return
     */
    Long selectBackArticleCount(@Param("param") ArticleQuery articleQuery);

    /**
     * 查询后台文章列表
     * @param articleQuery 文章查询条件
     * @return   后台文章列表
     */
    List<ArticleBackResponse> selectBackArticleList(@Param("param") ArticleQuery articleQuery);

    /**
     * 查询文章统计
     * @return
     */
    List<ArticleStatisticsResponse> selectArticleStatistics();

    /**
     * 根据条件查询文章
     * @param articleConditionQuery
     * @return
     */
    List<ArticleConditionResponse> selectArticleListByCondition(@Param("param") ArticleConditionQuery articleConditionQuery);

    /**
     * 根据id查询文章信息
     * @param articleId 文章id
     * @return 文章信息
     */
    ArticleInfoResponse selectArticleInfoById(@Param("articleId") Integer articleId);

    /**
     * 查询首页文章
     * @param pageQuery
     * @return
     */
    List<ArticleHomeResponse> selectArticleHomeList(@Param("param") PageQuery pageQuery);

    /**
     * 根据id查询首页文章
     * @param articleId
     * @return
     */
    ArticleResponse selectArticleHomeById(Integer articleId);

    /**
     * 查询上一章
     * @param articleId
     * @return
     */
    ArticlePaginationResponse selectLastArticle(Integer articleId);

    /**
     * 查询下一章
     * @param articleId
     * @return
     */
    ArticlePaginationResponse selectNextArticle(Integer articleId);

    /**
     * 查询推荐文章
     * @return
     */
    List<ArticleRecommendResponse> selectArticleRecommend();

    /**
     * 查看文章归档
     * @param pageQuery
     * @return
     */
    List<ArchiveResponse> selectArchiveList(@Param("param") PageQuery pageQuery);

    /**
     * 查看分类下的文章
     * @param articleConditionQuery
     * @return
     */
    List<ArticleConditionResponse> selectArrticleListByCondition(@Param("param") ArticleConditionQuery articleConditionQuery);

    /**
     * 文章搜索
     * @param keyword
     * @return
     */
    List<ArticleSearchResponse> searchArticle(@Param("keyword") String keyword);
}
